[Docker]HEALTHCHECKオプションを試す
コンニチハ、千葉です。小ネタです。
Docker1.12.0-rc3がリリースされてました。
今回は、その中から「HEALTHCHECK」オプションを試してみました。HEALTHCHECKオプションはdockerバージョンが1.12
以降で利用できます。
オプション
指定可能なオプションは以下となります。
--health-cmd string # ヘルスチェック用のコマンドを指定 --health-interval duration # ヘルスチェック間隔を指定(秒) --health-timeout duration # ヘルスチェック時のタイムアウトを指定(秒) --health-retries int # ヘルスチェック失敗時のリトライ回数を指定
やってみた
まず、dockerのバージョンを確認します。
1.12より古い場合は、バージョンアップを行ってください。私はMac環境なので、Docker for Macを入れました。
local$ docker --version Docker version 1.12.0-rc3, build 91e29e8, experimental
nginxのイメージにcurlを入れます。
local$ cat Dockerfile FROM httpd:2.2.31-alpine RUN apk update && apk add curl local$ docker build --tag httpd-healthcheck .
ヘルスチェックオプションを付けて起動します。
$ docker run -d -p 80:80 --name httpd --health-cmd "curl -f http://localhost/ || exit 1" --health-interval=30s --health-timeout=30s --health-retries=3 httpd-healthcheck
ヘルスチェックステータスを確認してみます。コンテナ起動直後、STATUSでヘルスチェックが実行している様子が見えますね。しばらくするとhealthy
になります。
local$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f2190cd08805 httpd-healthcheck "httpd-foreground" 31 seconds ago Up 30 seconds (health: starting) 0.0.0.0:80->80/tcp httpd CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2f1dd26c4c03 httpd-healthcheck "httpd-foreground" 40 seconds ago Up 40 seconds (healthy) 0.0.0.0:80->80/tcp httpd
inspectでもステータスを見てみます。Outputとして実行結果も見れます。
--- 省略 --- "Health": { "Status": "healthy", "FailingStreak": 0, "Log": [ { "Start": "2016-07-14T02:15:37.46947964Z", "End": "2016-07-14T02:15:37.554410283Z", "ExitCode": 0, "Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\u003chtml\u003e\u003cbody\u003e\u003ch1\u003eIt works!\u003c/h1\u003e\u003c/body\u003e\u003c/html\u003e\r100 44 100 44 0 0 42677 0 --:--:-- --:--:-- --:--:-- 44000\n" }, { "Start": "2016-07-14T02:16:07.560725123Z", "End": "2016-07-14T02:16:07.630002371Z", "ExitCode": 0, "Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\u003chtml\u003e\u003cbody\u003e\u003ch1\u003eIt works!\u003c/h1\u003e\u003c/body\u003e\u003c/html\u003e\r100 44 100 44 0 0 68217 0 --:--:-- --:--:-- --:--:-- 44000\n" }, { "Start": "2016-07-14T02:16:37.632486565Z", "End": "2016-07-14T02:16:37.722443135Z", "ExitCode": 0, "Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\u003chtml\u003e\u003cbody\u003e\u003ch1\u003eIt works!\u003c/h1\u003e\u003c/body\u003e\u003c/html\u003e\r100 44 100 44 0 0 42718 0 --:--:-- --:--:-- --:--:-- 44000\n" }, --- 省略 ---
強制的にunhealthyにしてみました。
local$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES eadbd69e92e9 httpd-healthcheck "httpd-foreground" 5 minutes ago Up 5 minutes (healthy) 0.0.0.0:80->80/tcp httpd local$ docker exec httpd rm /usr/bin/curl local$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES eadbd69e92e9 httpd-healthcheck "httpd-foreground" 18 minutes ago Up 18 minutes (unhealthy) 0.0.0.0:80->80/tcp httpd
unhealthyになりました。
さいごに
ヘルスチェック機能が追加されました。inspectで状態を取れるので監視にも期待が持てますね。 他にも1.12.0-rc3にてリリースされ沢山の機能は、こちらから確認可能です。
興味のある方は是非。